from WordProcessor import WordProcessor

class PromptGenerator:

    def generate_prompt(task_type, config):
        """
        根据任务类型和配置生成提示词
        :param task_type: 提示词类型 ('check', 'optimize', 'summary')
        :param config: 字典形式的配置数据
        :return: 生成的提示词字符串
        """
        if task_type == 'check':
            return PromptGenerator._generate_check_prompt(config)
        elif task_type == 'optimize':
            return PromptGenerator._generate_optimize_prompt(config)
        elif task_type == 'summary':
            return PromptGenerator._generate_summary_prompt(config)
        else:
            raise ValueError(f"未知的任务类型: {task_type}")

    def _generate_check_prompt(config):
        """生成文档检查任务的提示词"""
        wp = WordProcessor()
        check_target = ""
        user_prompt = ""
        prompt_output_format = "【输出规范】：\n- 以Markdown格式输出。"
        system_prompt = """【角色】：\n你是一位专业的文档质量检查AI助手，擅长多维度分析Word文档内容质量。\n【任务】：\n"""
        
        # 双文件比较检查
        if config.get('compare_files_check'):
            system_prompt += "## 对用户提供的【基准文件】和【新版文件】两个文档内容对比检查\n"
            user_prompt += f"- 【基准文件】: \n{wp.read_word_document(config.get('file_path_compare1', ''))}"
            user_prompt += f"- 【新版文件】: \n{wp.read_word_document(config.get('file_path_compare2', ''))}"
            if config.get('output_similarity_ratio_check'):
                system_prompt += "- 以【基准文件】内容为基准，返回文档相似度比例数值\n"
            if config.get('output_similarity_content_check'):
                system_prompt += "- 以【基准文件】内容为基准，返回【新版文件】中所有重复的内容\n"
            check_target = "对【新版文件】进行"
        else:
            user_prompt += f"【Word文档】: \n{wp.read_word_document(config.get('file_path_compare1', ''))}"
            check_target = "对【Word文档】进行"
        
        # 文本准确性检查
        if any(config.get(key) for key in ['spell_check', 'punctuation_check', 'grammar_check','redundancy_check', 'terminology_check']):
            system_prompt += f"## {check_target}文本准确性检查\n"
            if config.get('spell_check'):
                system_prompt += "- 错别字检查: 识别并标注拼写错误（如'优化'误写为'优货'）\n"
            if config.get('punctuation_check'):
                system_prompt += "- 标点符号检查: 检测中英文标点混用、缺失或冗余（如句末缺少句号）\n"
            if config.get('grammar_check'):
                system_prompt += "- 病句检查: 分析语法结构，标记主谓不一致、成分残缺等病句\n"
            if config.get('redundancy_check'):
                system_prompt += "- 语句冗余检查: 检测重复冗余语句（如'这个产品非常好，非常好'）\n"
            if config.get('terminology_check'):
                system_prompt += "- 术语一致性检查: 确保专业术语（如'AI'或'人工智能'）全文统一\n"
        
        # 数据与合规检查
        if any(config.get(key) for key in ['link_check', 'date_check']):
            system_prompt += f"## {check_target}数据与合规检查\n"
            if config.get('link_check'):
                system_prompt += "- 链接有效性检查: 验证文档中所有超链接是否有效\n"
            
            if config.get('date_check'):
                if config.get('date_condition') == 'within':
                    system_prompt += f"- 日期范围检查: 请识别文档中所有日期在{config.get('start_date')}至{config.get('end_date')}范围内的文本，这些日期不符合要求，需要返回具体文本内容。\n"
                else:
                    system_prompt += f"- 日期范围检查: 请识别文档中所有日期在{config.get('start_date')}至{config.get('end_date')}范围外的文本，这些日期不符合要求，需要返回具体文本内容。\n"
                
        # 增强个性化提示词处理，支持占位符回退
        check_custom_prompt = config.get('check_custom_prompt', '').strip()
        if check_custom_prompt and check_custom_prompt != config.get('check_custom_prompt_placeholder', '').strip():
            system_prompt += f"## 用户自定义检查要求\n{check_custom_prompt}\n"

        system_prompt += prompt_output_format
        return system_prompt,user_prompt

    def _generate_optimize_prompt(config):
        """获取内容优化的提示词"""
        system_prompt = ""
        # 内容优化
        if any(config.get(key) for key in ['spell_optimize', 'punctuation_optimize', 'grammar_optimize', 'redundancy_optimize',
                                        'terminology_optimize', 'word_optimize', 'sentence_optimize', 'readness_optimize']):
            system_prompt = "## 文档内容优化\n"
            if config.get('spell_optimize'):
                system_prompt += "- 错别字优化: 自动识别并修正拼写错误（如'优化'误写为'优货'）\n"
            if config.get('punctuation_optimize'):
                system_prompt += "- 标点符号优化: 修正中英文标点混用、缺失或冗余（如句末缺少句号）\n"
            if config.get('grammar_optimize'):
                system_prompt += "- 病句优化: 修正主谓不一致、成分残缺等语法问题\n"
            if config.get('redundancy_optimize'):
                system_prompt += "- 语句冗余优化: 修正重复冗余语句以及多余字符（如'这个产品非常好，非常好'）\n"
            if config.get('terminology_optimize'):
                system_prompt += "- 术语一致性优化: 统一全文专业术语表述\n"
            if config.get('word_optimize'):
                system_prompt += "- 用词优化: 替换模糊词汇为精准术语\n"
            if config.get('sentence_optimize'):
                system_prompt += "- 句子结构优化: 简化长句、调整语序提升流畅度\n"
            if config.get('readness_optimize'):
                system_prompt += "- 可读性优化: 自动分段、添加过渡句优化逻辑连贯性\n"        
        
        # 排版优化
        if config.get('enable_layout_check'):
            # 排版优化
            system_prompt += "## 文档排版优化\n"

            # 增强标题样式配置的完整性
            heading_levels = int(config.get('heading_levels', 3))
            for i in range(1, heading_levels + 1):
                heading_config = config.get(f'heading_{i}', {})
                system_prompt += f"- {i}级标题: 字体={heading_config.get('font')},字号={heading_config.get('fontsize')},对齐方式={heading_config.get('align')}, 加粗={'是' if heading_config.get('bold') else '否'},字体颜色={heading_config.get('color')}\n"
                
            #正文
            system_prompt += f"- 正文:字体={config.get('font_family')},字号={config.get('font_size')},字体颜色={config.get('font_color')},缩进={config.get('indent')}\n"
            
            # 修正行距设置状态判断，使用正确的配置键名
            if config.get('spacing_enabled'):
                system_prompt += f"- 段落行距: {config.get('line_spacing')}倍\n"
    
        # 增强个性化提示词处理，支持占位符回退
        custom_prompt = config.get('custom_prompt', '').strip()
        if custom_prompt and custom_prompt != config.get('custom_prompt_placeholder', '').strip():
            system_prompt += f"## 用户其他优化要求\n{custom_prompt}\n"

        return system_prompt

    def _generate_summary_prompt(config):
        """生成文档摘要任务的提示词"""
        prompt = "请生成Word文档摘要:\n"
        
        # 摘要类型
        summary_types = {
            'quick': '快速摘要',
            'extractive': '抽取式摘要',
            'generative': '生成式摘要',
            'hybrid': '混合式摘要'
        }
        prompt += f"\n## 摘要类型\n- {summary_types.get(config.get('summary_type', 'extractive'))}\n"
        
        # 位置设置
        locations = {
            "插入原文档顶端": "文档开头",
            "插入原文档末尾": "文档结尾",
            "新建独立文档": "新文档"
        }
        prompt += f"\n## 位置设置\n- 位置: {locations.get(config.get('summary_location', '插入原文档顶端'))}\n"
        
        # 长度控制
        if config.get('len_control'):
            methods = {
                "按字数": "字",
                "按比例": "%",
                "按句数": "句"
            }
            method = config.get('control_method', '按字数')
            prompt += (f"\n## 长度控制\n- 方式: {method}\n"
                    f"- 长度: {config.get('length_value', '')}{methods.get(method, '')}\n")
        
        # 关键词聚焦
        if config.get('keyword_focus'):
            mode = "包含" if config.get('keyword_mode') == 'include' else "排除"
            keywords = config.get('keywords', '')
            prompt += f"\n## 关键词聚焦\n- 模式: {mode}关键词\n- 关键词: {keywords}\n"
        
        return prompt